package com.thinvent.recommend.manager.parser;

import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.URISyntaxException;

/**
 * 用 Apache Tika 处理所有文档类型（.doc/.docx/.xls/.xlsx/.ppt/.pptx/.pdf/.txt……）
 * 捕获因内部 URISyntaxException 导致的 TikaException，避免解析单个链接失败中断整个文件解析。
 */
@Component
public class TikaDocumentParser implements DocumentParser {
    private static final Logger log = LoggerFactory.getLogger(TikaDocumentParser.class);
    private static final Tika tika = new Tika();

    @Override
    public boolean support(String extension) {
        // 无论什么后缀，都支持
        return true;
    }

    @Override
    public String parse(byte[] data) throws IOException {
        try (ByteArrayInputStream in = new ByteArrayInputStream(data)) {
            return tika.parseToString(in);
        } catch (TikaException e) {
            Throwable cause = e.getCause();
            if (cause instanceof URISyntaxException) {
                URISyntaxException uriEx = (URISyntaxException) cause;
                // 记录哪个 URI 出错，继续返回空字符串
                log.warn("文档解析时遇到非法 URI（{}），已跳过该部分内容", uriEx.getInput(), uriEx);
                return "";
            }
            // 其他 Tika 解析失败，抛出 IOException
            throw new IOException("Tika 解析失败", e);
        }
    }
}
